package com.iatinspur.dubbo.test;

import com.iatinspur.dubbo.factory.GenericServiceFactory;
import org.apache.dubbo.rpc.service.GenericService;
import org.junit.jupiter.api.Test;

import java.util.HashSet;
import java.util.Set;

/**
 * 【5.使用grpc协议】
 *    流式调用
 */

public class TripleDoProvider {

    /**
     * todo 一个dubbo服务带有triple协议的，至少有两个端口。但是只能调一个
     *      比如这台服务 60907 走dubbo协议时60907完成，走triple协议时由60907转60908，【但就是不能直接调用60908】
     *  结果一样
     */
    @Test
    public  void doDubbo() {
        GenericService dubboService = GenericServiceFactory
                .getDubboService("com.iatinspur.dubbo.service.ProviderService",
                        "1.0.0", "dubbo", 60907);
        GenericService tripleService = GenericServiceFactory
                .getDubboService("com.iatinspur.dubbo.service.ProviderService",
                        "1.0.0", "tri", 60907);
        System.err.println(dubboService.$invoke("getInfo", new String[]{}, new Object[]{}));
        System.err.println(tripleService.$invoke("getInfo", new String[]{}, new Object[]{}));
    }

    /**
     * todo 通过nacos调dubbo 设置是dubbo协议就只调到【配置文件明确指出】dubbo协议的服务
     *                      设置是dubbo协议就只调到【配置文件明确指出】triple协议的服务
     */
    @Test
    public  void doNacos() {
        Set<Object> dubboSet = new HashSet<>();
        GenericService dubboService = GenericServiceFactory
                .getNacosService("com.iatinspur.dubbo.service.ProviderService",
                        "1.0.0", "dubbo");
        for (int i = 0; i<10000; i++){
            dubboSet.add(dubboService.$invoke("getInfo", new String[]{}, new Object[]{}));
        }

        Set<Object> tripleSet = new HashSet<>();
        GenericService tripleService = GenericServiceFactory
                .getNacosService("com.iatinspur.dubbo.service.ProviderService",
                        "1.0.0", "tri");
        for (int i = 0; i<10000; i++){
            tripleSet.add(tripleService.$invoke("getInfo", new String[]{}, new Object[]{}));
        }


        Set<Object> allSet = new HashSet<>();
        GenericService allService = GenericServiceFactory
                .getNacosService("com.iatinspur.dubbo.service.ProviderService",
                        "1.0.0", null);
        for (int i = 0; i<10000; i++){
            allSet.add(allService.$invoke("getInfo", new String[]{}, new Object[]{}));
        }

        System.err.println("调10000次【dubbo】协议得到的结果---》"+dubboSet+"    有两个该协议的服务提供者");
        System.err.println("调10000次【triple】协议得到的结果---》"+tripleSet+"    有两个该协议的服务提供者");
        System.err.println("调10000次【指定协议】协议得到的结果---》"+allSet+"    有四个该协议的服务提供者");
    }


}
